package gov.pr.celepar.sentinela.admin.action.consultas;

import gov.pr.celepar.sentinela.Constants;
import gov.pr.celepar.sentinela.admin.action.BaseAction;
import gov.pr.celepar.sentinela.admin.excecao.SentinelaServerException;
import gov.pr.celepar.sentinela.admin.facade.ConsultasFacade;
import gov.pr.celepar.sentinela.admin.facade.SistemaFacade;
import gov.pr.celepar.sentinela.admin.form.consultas.FuncoesGrupoReportForm;
import gov.pr.celepar.sentinela.admin.pojo.Funcao;
import gov.pr.celepar.sentinela.admin.pojo.Grupo;

import java.util.Collection;
import java.util.Iterator;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;

public class FuncoesGrupoReportAction extends BaseAction {
	private static Log logger = LogFactory
			.getLog(FuncoesGrupoReportAction.class);

	public String executar(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		this.forward = "funcoes_de_um_grupo";
		FuncoesGrupoReportForm frm = (FuncoesGrupoReportForm) form;

		long[] gruposCom = this.comunicacao.getIdGrupos();
		Long codGruposCom[] = null;
		if (gruposCom != null) {
			codGruposCom = new Long[gruposCom.length];
			for (int i = 0; i < gruposCom.length; i++)
				codGruposCom[i] = Long.valueOf(gruposCom[i]);
		}

		// aqui populou a lista na sessao
		listarSistemasAutorizados(request);

		if (frm.getCodSistema() != null && !frm.getCodSistema().equals("")) {
			Long codSistema = Long.decode(frm.getCodSistema());
			try {
				Collection<Grupo> grupos = SistemaFacade
						.listarGruposVinculados(codSistema, new Long(
								this.comunicacao.getCodUsuario()), codGruposCom);
				request.setAttribute("listaGrupos", grupos);
			} catch (Exception e) {
				logger.info("Ocorreu um erro ao coletar a lista de grupos:"
						+ e.toString());
			}
		}
		if (frm.getCodGrupo() != null && !frm.getCodGrupo().equals("")) {
			try {
				Long codSistema = Long.decode(frm.getCodSistema());
				Long codGrupo = Long.decode(frm.getCodGrupo());

				Collection<Funcao> arvore = ConsultasFacade
						.listarFuncoesSistemaAutorizadas(codSistema, codGrupo);

				if (arvore != null && !arvore.isEmpty()) {
					Iterator j = arvore.iterator();

					while (j.hasNext()) {
						Funcao f = (Funcao) j.next();

						int h = f.getNivel();
						while (h > 0) {
							f.setNome(Constants.TAB_HTML + Constants.TAB_HTML
									+ f.getNome());
							h--;
						}
					}
					request.setAttribute("listaFuncoes", arvore);
				} else {
					throw new SentinelaServerException(
							"Nenhuma Função autorizada ao Grupo selecionado.");
				}
			} catch (Exception e) {
				throw e;
			}
		}
		return "funcoes_de_um_grupo";
	}
}
